1 Présentation du sujet
1.1 Introduction
En 2023, ce n’est pas moins de 40,9 milliards de tonnes de CO² qui ont été émis au niveau mondial et qui participe donc à l’aggravation du changement climatique. A ce stade, il est primordial d’étudier ce phénomène afin de pouvoir mieux le comprendre et prévoir son évolution future. Dans cette analyse, nous chercherons à étudier les facteurs déterminants faisant qu’un pays ait une émission de CO² plus ou moins importante.
1.2 Problématique
Ce rapport se concentre principalement sur les déterminants de la richesse du pays, la structure de sa population, le niveau d’éducation et les conditions de vie de chaque pays.
Nous chercherons donc à travers cette analyse à expliquer la différence d’émissions entre pays à partir de ces facteurs et en utilisant différentes méthodes de modélisation.
D’autres informations, telles que les moyens mis en œuvre et d’autres effets liés aux réglementations visant à lutter contre la pollution, pourraient être déterminantes, cependant ils sont difficilement mesurables, ce qui nous empêche de les inclure dans notre modèle.
1.3 Modèle théorique
En se basant sur le PIB, le taux de mortalité, (mesure du niveau d’éducation), la part des produits manufacturé, le log de la population, (indicateur sur la structure de la population) nous allons modéliser l’émission de CO² par pays. Cependant, il y a une influence du PIB sur le CO² mais également une influence de l’émission de CO² sur le PIB. Cela se traduit par un problème d’endogénéïté.
Equations simultanées :
\(\begin{cases} log(CO²) = {\beta_0}+ {\beta_1}log(PIB) + {\beta_2}X_2 + {\beta_3}X_3 + {\beta_4}X_4+ {\beta_5}X_5 + {\beta_6}X_6 + {\beta_7}X_7 + {\epsilon_C} \\[0.5cm] log(PIB)={\theta_0}+ {\theta_1}log(CO²) + {\theta_2}Z_2 + {\theta_3}Z_3 + {\theta_4}Z_4 + {\epsilon_P} \end{cases}\)
Avec :
- \(X_2 :\) Pourcentage d’adolescent déscolarisé
- \(X_3 :\) Pourcentage de la population agé de 15 à 64 ans
- \(X_4 :\) Population totale
- \(X_5 :\) Pourcentage de mortalité enfantile pour 1000 nouveaux nés
- \(X_6 :\) Formation brute de capital fixe en % du PIB
- \(X_7 :\) Pourcentage des produits manufacturés dans le PIB
- \(X_8 :\) Pourcentage du commerce dans le PIB (mesure de l’ouverture)
Nous allons utiliser le taux de mortalité, la mesure de l’ouverture et le pourcentage d’adolescent déscolarisé comme instruments dans notre modèle.
\(Z=\) \(\begin{pmatrix} X_2\\X_5 \\ X_8 \end{pmatrix}\)
2 Collecte et traitement des données
Les données utilisées pour traiter notre problématique et réaliser notre modélisation proviennet essentiellement de la plateforme DataBank mis en place par la banque mondiale à l’url : https://databank.worldbank.org/ . De là, nous avons assemblés 10 variables pour un ensemble de 217 observations. Ces variables sont le PIB par tête en dollars constant de 2017, l’émissions de CO2 en tonnes métriques par habitant (variable à expliquer), le pourcentage d’adolescents non scolarisés en age d’être dans le secondaire, le pourcentage de la population entre 15 et 65 ans, la population totale, le taux de mortalité infantile pour 1,000 naissances, la formation brute de capital en pourcentage du PIB, la valeur ajoutée des produits manufacturé et le ratio commerce/PIB.
2.1 Présentation du jeu de données
Le résumé de l’ensemble du jeu de données est donné par :
Résumé statistique des variables
=======================================================================
Statistic N Mean St. Dev. Min Max
-----------------------------------------------------------------------
GDP_per_capita 194 20,546.32 20,754.67 711.36 112,274.80
Emissions_CO2 191 3.79 4.61 0.03 31.73
Adolescents_out_of_school 121 10.42 13.93 0.05 54.48
Population_15_64 217 63.85 6.29 48.62 83.41
Mortality_rate 196 20.26 18.78 1.00 80.50
Gross_fixed_capital_formation 163 22.40 7.50 5.79 56.47
Manufacturing_percent_of_GDP 187 11.48 7.29 0.34 47.77
Trade_percent_of_GDP 175 84.14 58.63 9.96 372.27
-----------------------------------------------------------------------
Nous pouvons visualiser la dispertion de chaqu’une des variables de notre modèle.Certaines d’entre elles ne présentent pas 217 observations cela indique qu’il y a des valeurs manquantes dans notres base de données. Aussi, nous relevons une forte dispersion des valeurs pour l’ensemble des valeurs.
Nous allons visualiser plus en profondeur chaqu’une des variables et le lien qu’elles ont 2 à 2.
3 Analyse descriptive des données
3.1 Statistiques descriptives univarier
# Création d'une fonction pour les boxplots
graph_TD.bp <- function(uneVariable){
ggplot(data = Emission, aes_string(x = "factor(0)", y = uneVariable)) +
geom_boxplot() + xlab("") + ylab("") + ggtitle(uneVariable)
}
# Appliquer la fonction aux différentes variables
p0.bp <- graph_TD.bp("Emissions_CO2")
p1.bp <- graph_TD.bp("GDP_per_capita")
p2.bp <- graph_TD.bp("Mortality_rate")
p3.bp <- graph_TD.bp("Manufacturing_percent_of_GDP")
p4.bp <- graph_TD.bp("Trade_percent_of_GDP")
p5.bp <- graph_TD.bp("Adolescents_out_of_school")
p6.bp <- graph_TD.bp("Population_15_64")
p8.bp <- graph_TD.bp("Gross_fixed_capital_formation")
gridExtra::grid.arrange(p0.bp, p1.bp, p2.bp, ncol = 3)
On observe sur ce premier regroupement de boxplot une forte variabilité du taux de mortalité infantile d’autant plus forte une fois la médiane passé. De même pour le PIB par habitant, les valeurs sont très dispercé à passé la médiane et plusieur pays qui se distinguent des autres. Le l’Emission de CO2 quant a lui est plus équilibré (moins de dispersion) et seul 3 valeurs semblent se distinguer des autres.
gridExtra::grid.arrange(p3.bp,p4.bp, p5.bp, ncol=3)
De même sur cette seconde représentation sauf que seulement un individu
qui se distigue largement des autres pour Valeur ajoutée manufacturière
(% du PIB)
gridExtra::grid.arrange(p6.bp, p8.bp, ncol = 2)
Sur cette dernière représentent on constate une distribution
pratiquement proportionel à la médiane pour Pourcentage de la population
âgée de 15 à 64 ans . Et aussi des individu se distingue des autres
.
3.2 Statistiques bivariées
# Création d'une fonction pour créer des graphiques
graph_TD <- function(uneVariable){
ggplot(data =Emission, aes_string(x = uneVariable, y = "Emissions_CO2")) + geom_point()
}
# Graphique du taux de chômage en fonction de chaque variable 1 à 1
p1 <- graph_TD("GDP_per_capita")
p2 <- graph_TD("Mortality_rate")
p3 <- graph_TD("Manufacturing_percent_of_GDP")
p4 <- graph_TD("Trade_percent_of_GDP")
p5 <- graph_TD("Adolescents_out_of_school")
p6 <- graph_TD("Population_15_64")
p8 <- graph_TD("Gross_fixed_capital_formation")
gridExtra::grid.arrange(p1, p2, p8, ncol = 2)
Les émissions de CO2 augmentent avec le PIB par habitant et la formation brute de capital fixe, mais diminuent avec le taux de mortalité infantile. Aucune tendance claire n’est observée avec la population totale.
gridExtra::grid.arrange(p3, p4, p5, p6, ncol = 2)
Les émissions de CO2 augmentent avec leValeur ajoutée manufacturière (%
du PIB) , Commerce (% du PIB), Pourcentage de la population âgée de 15 à
64 ans . Aucune tendance claire n’est observée avec le Pourcentage
d’adolescents non scolarisés.
3.3 Analyse de corrélation et ACP
3.3.1 Matrice des corrélations
# La variable dépendante est Emission de CO2
Emission %>%
cor() %>%
corrplot::corrplot( tl.cex = 0.5, tl.col = "black", diag = F, type="upper" )
La matrice de corrélation révèle des liens significatifs entre les
indicateurs utilisés pour notre analyse. Ce graphique nous permet de
constater que PIB par habitant est la variable de notre modèle la plus
corrélé aux émission de \(CO²\) mais
également que celui-ci est fortement corrélé au pourcentage d’adolescent
déscolarisé, au pourcentage de mortalité enfantile et au pourcentage du
commerce dans le PIB. Deux de ces variables (pourcentage d’adolescent
déscolarisé; pourcentage de mortalité enfantile) sont également très
liées linéairement. Tout cela suggère la présence d’endogénéïte entre
les émissions de \(CO²\) et le PIB par
habitant et de multicolinéarité entre les variables choisit dans notre
modèle.
3.3.2 Analyse en composantes principales
Au-delà de trois dimension, il est assez compliqué de visualiser graphiquement la relation que peuvent avoir plusieurs variable. On va donc passer par l’analyse factorielle des correspondence qui pourra nous permettre de déceler les variables qui se ressemble et les pays qui se ressemblent,et ceux qui sont opposé.
3.3.3 Représentation des variables
# Réalisation de l'ACP
PCA(Emission, scale.unit = TRUE, quanti.sup = c("Emissions_CO2"), graph = FALSE) %>%
plot( choix = "var")
L’analyse des deux premieres composantes principales est limité de part la quantité d’information restreinte qu’elle nous renvoie, cependant nous pouvons tout de même constater, en accord avec la matrice de corrélation, que le pourcentage d’adolescent déscolarisé et le pourcentage de mortalité enfantile sont fortement colinéaire. Elle met aussi en avant le lien qu’ils ont avec le pourcentage de la population agé de 15 à 64 ans.
4 Problème d’endogénéïté
4.1 Spécification du modèle
Dans un premier temps nous chercherons confirmer l’hypothèse d’endogénéïté entre les émissions de \(CO²\) et le PIB par habitant que nous avons présentit en introduction. Nous commençons par définir un modèle naïf par la méthode des MCO avec l’ensemble de nos variables que l’on comparera avec la méthode des doubles moindres carrés. Cela nous permettera de relever les problèmes d’endogénéïté car on sait que les 2MCO sont moins efficaces que les OLS quand les variables explicatives sont toutes exogènes.
#Estimation par MCO : Sans les variables instrumentales
modele_mco <- Emission %>% select(-Adolescents_out_of_school, -Trade_percent_of_GDP, -Mortality_rate) %>%
lm(Emissions_CO2~., data=.)
#Estimation par 2MCO : Avec les instruments Adolescents_out_of_school, Trade_percent_of_GDP, Mortality_rate
modele_double_mco <- ivreg( Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP + Gross_fixed_capital_formation + Population_15_64 | Mortality_rate + Manufacturing_percent_of_GDP + Adolescents_out_of_school + Population_15_64 + Trade_percent_of_GDP + Gross_fixed_capital_formation, data=Emission)
stargazer(modele_mco, modele_double_mco, type='text', title = "Résumé des différents modèles")
Résumé des différents modèles
=================================================================
Dependent variable:
-----------------------------------
Emissions_CO2
OLS instrumental
variable
(1) (2)
-----------------------------------------------------------------
GDP_per_capita 0.0001*** 0.0001***
(0.00001) (0.00002)
Population_15_64 0.201*** 0.238***
(0.068) (0.073)
Gross_fixed_capital_formation 0.098** 0.105**
(0.041) (0.042)
Manufacturing_percent_of_GDP -0.027 -0.019
(0.051) (0.052)
Constant -12.938*** -15.032***
(4.293) (4.547)
-----------------------------------------------------------------
Observations 95 95
R2 0.508 0.492
Adjusted R2 0.486 0.469
Residual Std. Error (df = 90) 2.668 2.711
F Statistic 23.197*** (df = 4; 90)
=================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
Résumé des résultats
Modèle(1)
- PIB par habitant (GDP_per_capita) : Le coefficient est significatif et positif, ce qui suggère qu’une augmentation du PIB par habitant est associée à une augmentation des émissions de CO2.
- Pourcentage de la population âgée de 15 à 64 ans (Population_15_64) : Le coefficient est significatif et positif, indiquant que les pays avec une plus grande proportion de la population(15-65) tendent à avoir des émissions de CO2 plus élevées.
- Formation brute de capital fixe (Gross_fixed_capital_formation) : Le coefficient est significatif et positif, ce qui implique que des niveaux plus élevés de formation brute de capital fixe sont associés à des émissions de CO2 plus élevées.
- Pourcentage de la valeur ajoutée manufacturière dans le PIB (Manufacturing_percent_of_GDP) : Le coefficient n’est pas significatif à un niveau de confiance de 95%, ce qui suggère qu’il n’y a pas de relation claire entre la part de la valeur ajoutée manufacturière dans le PIB et les émissions de CO2.
L’estimation par les MCO donne des résultats possiblement biaisé si l’on a bien un problème d’endogénéïté. Il faut donc mettre en place un modèle avec les méthodes des doubles moindres carrés.
Modèle IV (2)
Les coefficients pour les variables explicatives sont similaires à ceux du modèle OLS en termes de signe et de magnitude. En utilisant les instruments pour traiter l’endogénéité, les coefficients restent significatifs et leur interprétation reste similaire au modèle 1.
Comparaison des modèles
Les R² ajustés sont similaires entre les deux modèles, indiquant qu’ils expliquent chacun environ 47-49% de la variance des émissions de CO2. Les erreurs-types résiduelles sont similaires entre les deux modèles, suggérant que l’ajout d’instruments n’a pas beaucoup affecté la précision des estimations. Le test F pour l’ensemble de la régression est significatif dans les deux cas, indiquant que les modèles sont statistiquement significatifs dans l’ensemble.
En résumé, les résultats des deux modèles montrent que le PIB par habitant, la proportion de la population en âge de travailler et la formation brute de capital fixe sont des déterminants importants des émissions de CO2. L’utilisation de variables instrumentales dans le deuxième modèle confirme ces résultats et permet de traiter l’endogénéité potentielle.
summary( modele_double_mco, diagnostics=TRUE)
Call:
ivreg(formula = Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP +
Gross_fixed_capital_formation + Population_15_64 | Mortality_rate +
Manufacturing_percent_of_GDP + Adolescents_out_of_school +
Population_15_64 + Trade_percent_of_GDP + Gross_fixed_capital_formation,
data = Emission)
Residuals:
Min 1Q Median 3Q Max
-4.0069 -1.5119 -0.5604 1.0369 11.3112
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.503e+01 4.547e+00 -3.306 0.001362 **
GDP_per_capita 7.058e-05 2.002e-05 3.526 0.000667 ***
Manufacturing_percent_of_GDP -1.909e-02 5.242e-02 -0.364 0.716578
Gross_fixed_capital_formation 1.050e-01 4.218e-02 2.490 0.014625 *
Population_15_64 2.384e-01 7.318e-02 3.258 0.001586 **
Diagnostic tests:
df1 df2 statistic p-value
Weak instruments 3 88 27.502 1.22e-12 ***
Wu-Hausman 1 89 2.789 0.0984 .
Sargan 2 NA 4.344 0.1140
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.711 on 90 degrees of freedom
Multiple R-Squared: 0.4917, Adjusted R-squared: 0.4691
Wald test: 14.19 on 4 and 90 DF, p-value: 5.126e-09
4.2 Weak instrument
GDP_FRM <- lm(GDP_per_capita ~ Mortality_rate +
Manufacturing_percent_of_GDP + Adolescents_out_of_school +
Population_15_64 + Trade_percent_of_GDP + Gross_fixed_capital_formation, data=Emission)
GDP_FRMC <- lm(GDP_per_capita ~ Manufacturing_percent_of_GDP +
Gross_fixed_capital_formation + Population_15_64, data=Emission)
anova(GDP_FRMC, GDP_FRM)
Analysis of Variance Table
Model 1: GDP_per_capita ~ Manufacturing_percent_of_GDP + Gross_fixed_capital_formation +
Population_15_64
Model 2: GDP_per_capita ~ Mortality_rate + Manufacturing_percent_of_GDP +
Adolescents_out_of_school + Population_15_64 + Trade_percent_of_GDP +
Gross_fixed_capital_formation
Res.Df RSS Df Sum of Sq F Pr(>F)
1 91 3.7888e+10
2 88 1.9555e+10 3 1.8334e+10 27.502 1.219e-12 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Le test de weak instrument indique que les variables taux de mortalité enfantile, ratio commerce/PIB et pourcentage d’adolescent descolarisé sont de bons instruments car ils sont corrélés à la variable PIB par tête. On teste alors la pertinance de l’estimateur des doubles MCO.
4.3 Test de Hausman-Wu
residu = residuals(GDP_FRM)
Wu_Hausman <- lm(Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP + Gross_fixed_capital_formation + Population_15_64 + residu, data = Emission)
summary(Wu_Hausman)
Call:
lm(formula = Emissions_CO2 ~ GDP_per_capita + Manufacturing_percent_of_GDP +
Gross_fixed_capital_formation + Population_15_64 + residu,
data = Emission)
Residuals:
Min 1Q Median 3Q Max
-5.2486 -1.3542 -0.3670 0.7081 9.8651
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.503e+01 4.432e+00 -3.392 0.001037 **
GDP_per_capita 7.058e-05 1.951e-05 3.618 0.000492 ***
Manufacturing_percent_of_GDP -1.909e-02 5.109e-02 -0.374 0.709520
Gross_fixed_capital_formation 1.050e-01 4.110e-02 2.555 0.012328 *
Population_15_64 2.384e-01 7.132e-02 3.343 0.001215 **
residu 4.536e-05 2.716e-05 1.670 0.098399 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.642 on 89 degrees of freedom
Multiple R-squared: 0.5226, Adjusted R-squared: 0.4958
F-statistic: 19.48 on 5 and 89 DF, p-value: 4.655e-13
Le test d’Hausman confirme notre hypothèse initial d’endogénéïté dans le modèle.
Le test de Sargan renvoie une p-value supérieur à 5% alors nos variables instrumental ne sont pas corrélés aux résidus.
5 Traitement de la multicolinéarité
Nous avons vu dans la partie “Analyse descriptive des données” que certains couples de variables dont le pourcentage de mortalité et le pourcentage d’adolescent déscolarisé ont un coefficient de corrélation élevé. Les résultats des estimations obtenu par la méthode des moidres carrés sont très sensibles au moindre changement des variables explicatives.Ils sont instables et donc difficiles à interpréter, il est donc nécessaire de traiter ce problème.
Avec le facteur d’inflation de la variance nous allons déterminer pour un seuil de 3 les variables qui ont une forte relation linéaire avec les autres régresseurs.
modele = lm(Emissions_CO2~., data = Emission)
# Calculer les facteurs d'inflation de la variance (VIF)
vif_values = vif(modele)
vif_values_sqrt = sqrt(vif_values)
# Afficher les valeurs VIF
print("Valeurs VIF :")
## [1] "Valeurs VIF :"
print(vif_values[which(vif_values>=5)])
## named numeric(0)
Le VIF nous indique qu’aucune de nos variables ne semble corrélé entre elles, en effet les VIF caclulés sont tous inférieur à 5.
mat_corr = cor(Emission)
mat_corr^2 > 0.8
GDP_per_capita Emissions_CO2
GDP_per_capita TRUE FALSE
Emissions_CO2 FALSE TRUE
Adolescents_out_of_school FALSE FALSE
Population_15_64 FALSE FALSE
Mortality_rate FALSE FALSE
Gross_fixed_capital_formation FALSE FALSE
Manufacturing_percent_of_GDP FALSE FALSE
Trade_percent_of_GDP FALSE FALSE
Adolescents_out_of_school Population_15_64
GDP_per_capita FALSE FALSE
Emissions_CO2 FALSE FALSE
Adolescents_out_of_school TRUE FALSE
Population_15_64 FALSE TRUE
Mortality_rate FALSE FALSE
Gross_fixed_capital_formation FALSE FALSE
Manufacturing_percent_of_GDP FALSE FALSE
Trade_percent_of_GDP FALSE FALSE
Mortality_rate Gross_fixed_capital_formation
GDP_per_capita FALSE FALSE
Emissions_CO2 FALSE FALSE
Adolescents_out_of_school FALSE FALSE
Population_15_64 FALSE FALSE
Mortality_rate TRUE FALSE
Gross_fixed_capital_formation FALSE TRUE
Manufacturing_percent_of_GDP FALSE FALSE
Trade_percent_of_GDP FALSE FALSE
Manufacturing_percent_of_GDP Trade_percent_of_GDP
GDP_per_capita FALSE FALSE
Emissions_CO2 FALSE FALSE
Adolescents_out_of_school FALSE FALSE
Population_15_64 FALSE FALSE
Mortality_rate FALSE FALSE
Gross_fixed_capital_formation FALSE FALSE
Manufacturing_percent_of_GDP TRUE FALSE
Trade_percent_of_GDP FALSE TRUE
Le test sur le carré des coefficients de corrélation sont tous inférieur à 0.8, on accord avec le VIF, on ne suspecte pas de problème de multicolinéarité.
#Si le carré du coefficient de corrélation est supérieur au R^2, on peut soupçonner de la colinéarité.
mat_corr^2 > summary(modele)$r.squared
GDP_per_capita Emissions_CO2
GDP_per_capita TRUE FALSE
Emissions_CO2 FALSE TRUE
Adolescents_out_of_school FALSE FALSE
Population_15_64 FALSE FALSE
Mortality_rate FALSE FALSE
Gross_fixed_capital_formation FALSE FALSE
Manufacturing_percent_of_GDP FALSE FALSE
Trade_percent_of_GDP FALSE FALSE
Adolescents_out_of_school Population_15_64
GDP_per_capita FALSE FALSE
Emissions_CO2 FALSE FALSE
Adolescents_out_of_school TRUE FALSE
Population_15_64 FALSE TRUE
Mortality_rate TRUE FALSE
Gross_fixed_capital_formation FALSE FALSE
Manufacturing_percent_of_GDP FALSE FALSE
Trade_percent_of_GDP FALSE FALSE
Mortality_rate Gross_fixed_capital_formation
GDP_per_capita FALSE FALSE
Emissions_CO2 FALSE FALSE
Adolescents_out_of_school TRUE FALSE
Population_15_64 FALSE FALSE
Mortality_rate TRUE FALSE
Gross_fixed_capital_formation FALSE TRUE
Manufacturing_percent_of_GDP FALSE FALSE
Trade_percent_of_GDP FALSE FALSE
Manufacturing_percent_of_GDP Trade_percent_of_GDP
GDP_per_capita FALSE FALSE
Emissions_CO2 FALSE FALSE
Adolescents_out_of_school FALSE FALSE
Population_15_64 FALSE FALSE
Mortality_rate FALSE FALSE
Gross_fixed_capital_formation FALSE FALSE
Manufacturing_percent_of_GDP TRUE FALSE
Trade_percent_of_GDP FALSE TRUE
Enfin , aucun carré des coefficients de corrélation n’est supérieur au \(R^2\). Nous pouvons donc conclure qu’il n’y a pas de problème de multicolinéarité entre nos variables.
5.1 Méthode en grande dimension
Bien que les vérifications effectuées sur la présence de la multicolinéarité sont retournées nulles, nous avons tout de même constaté un lien linéaire entre plusieurs variables lors de l’étude descriptive de nos données. De fait, nous allons donc mettre en place et étudier différente méthode de réduction de dimension puis de pénalisation afin de voir et de discuter de ce qu’il en sort.
5.1.1 PCR
Modélisation et test des performances du modèle
set.seed(500)
pcr_emiss <- pcr(Emissions_CO2~., data=Emission, scale=TRUE, jackknife = TRUE, validation="CV", ncomp=7)
summary(pcr_emiss)
Data: X dimension: 95 7
Y dimension: 95 1
Fit method: svdpc
Number of components considered: 7
VALIDATION: RMSEP
Cross-validated using 10 random segments.
(Intercept) 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps
CV 3.74 2.988 3.008 3.019 3.091 3.090 2.817
adjCV 3.74 2.985 3.002 3.013 3.078 3.075 2.798
7 comps
CV 2.904
adjCV 2.881
TRAINING: % variance explained
1 comps 2 comps 3 comps 4 comps 5 comps 6 comps 7 comps
X 43.62 60.58 75.04 85.93 94.14 97.79 100.00
Emissions_CO2 37.96 39.14 39.24 41.50 43.25 54.18 54.58
Après avoir estimer notre modèle de régression en composante principale, l’estimation du risque moyen d’erreur RMSEP par validation croisée nous suggère de retenir les 6 premières composantes avec une RMSEP = 2.798 pour notre modèle PCR final. Ainsi, nous retrouvons que notre modèle finale à 6 composantes explique 97.79% de la variance.
explvar(pcr_emiss)
Comp 1 Comp 2 Comp 3 Comp 4 Comp 5 Comp 6 Comp 7
43.622795 16.958184 14.458173 10.889093 8.215618 3.646174 2.209962
On constate que les 3 premieres composantes expliquent à elles seules \(\frac{3}{4}\) de la variance.
5.1.2 PLS
Modélisation et test des performances du modèle
pls_emiss <- plsr(Emissions_CO2~., data=Emission, scale=TRUE, jackknife = TRUE,validation="CV")
summary(pls_emiss)
Data: X dimension: 95 7
Y dimension: 95 1
Fit method: kernelpls
Number of components considered: 7
VALIDATION: RMSEP
Cross-validated using 10 random segments.
(Intercept) 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps
CV 3.74 2.972 2.953 2.884 2.829 2.832 2.830
adjCV 3.74 2.966 2.932 2.863 2.811 2.815 2.812
7 comps
CV 2.831
adjCV 2.814
TRAINING: % variance explained
1 comps 2 comps 3 comps 4 comps 5 comps 6 comps 7 comps
X 43.23 53.88 64.30 74.35 83.70 92.69 100.00
Emissions_CO2 42.22 50.97 53.93 54.54 54.57 54.58 54.58
Pour le modèle de régression des moindres carrés partiels, l’estimation du risque moyen d’erreur RMSEP par validation croisée nous suggère de retenir les 4 premières composantes avec une RMSE = 2.811 pour notre modèle PLS final. Ainsi, nous retrouvons que notre modèle finale à 4 composantes explique 74.35% de la variance.
5.1.3 Conclusion
Pour la réduction de dimension, suivant le principe de parcimonie, la méthode la plus efficace est la régression des moindres carrés partiels qui nous renvoie un modèle faisait un nombre d’erreur équivalent à celui du modèle obtenus par la régression sur composantes principales mais avec un nombre de paramètre plus faible. A savoir, une RMSE de 2.81 pour la methode PLS et une RMSE d’environ 2.8.
Coefficient estimée
#Coefficient variable centré réduite
coeff_pls = coefficients(pls_emiss, ncomp=4)
#Ecart-type variable initiale
sd_var = Emission %>% select(GDP_per_capita, Adolescents_out_of_school, Population_15_64,
Mortality_rate, Gross_fixed_capital_formation, Manufacturing_percent_of_GDP,
Trade_percent_of_GDP) %>% map(sd) %>% as.data.frame() %>% t()
#Coefficient variable initiale
coeff_var_init = merge(coeff_pls,sd_var,by="row.names") %>%
mutate(coeff = `Emissions_CO2.4 comps`/V1) %>% select(Row.names, coeff)
coeff_var_init
Row.names coeff
1 Adolescents_out_of_school 0.0178081219
2 GDP_per_capita 0.0001157846
3 Gross_fixed_capital_formation 0.1066540704
4 Manufacturing_percent_of_GDP -0.0300510416
5 Mortality_rate -0.0114335914
6 Population_15_64 0.2309863282
7 Trade_percent_of_GDP -0.0144371762
Interprétation des coefficients
coefplot(pls_emiss, ncomp=4, se.whiskers = TRUE, labels = prednames(pls_emiss), cex.axis = 0.5)
La variabilité des coefficients estimés par validation croisée pour le
PIB par habitant (GDP_per_capita) est très forte, et donc l’estimation
du coefficient associé ne semble pas pertinente, contrairement à
l’ensemble des autres variables. De plus, pour la part d’adolescents
déscolarisés (Adolescents_out_of_school), le taux de mortalité
(Mortality_rate) et la part de la production manufacturière dans le PIB
(Manufacturing_percent_of_GDP), il n’est pas totalement certain que ces
variables soient différentes de 0. En revanche, la part de la population
âgée entre 15 et 64 ans, la FBCF et la part du commerce extérieur dans
le PIB semblent significatives et plus précises.
Ainsi, nous pouvons dire avec un certain degré de confiance toutes choses égale par ailleurs, qu’une variation d’un point de pourcentage de la part de population agées entre 15 et 64 ans entrainera une augmentation de 0.23 des tonnes de \(CO²\) émis par habitant, qu’une variation d’une unité de la FBCF entrainera une augmentation de 0.1 d’émission de tonnes de \(CO²\) par habitant, qu’une variation d’un point de pourcentage de la part du commerce extérieur dans le PIB entrainera une diminution de -0.014 des tonnes de \(CO²\) émis par habitant.
5.2 Méthode de pénalisation
Le nombre de varaible est une mesure de la complexité des algorithmes linéaires, afin d’éviter les biais de sur-apprentissage il est essentiel de le controler. Pour cela, nous allons utiliser la méthode de regression Elastic Net qui combine les méthodes de régression Ridge et Lasso à travers un paramètre lambda donnant plus ou moins de poids à l’une des méthodes par rapport à l’autre.
5.2.1 Elastic net
Entrainement du modèle
model1$results %>% arrange(RMSE) %>% slice(1)
alpha lambda RMSE Rsquared MAE RMSESD RsquaredSD MAESD
1 0 0 2.730046 0.6335079 2.046694 1.002412 0.2207046 0.6383098
Après avoir entrainé plusieurs modèle de régression Elastic Net pour un ensemble de paramètres \(\alpha \in [0,1]\) avec un pas de 0.05 et \(\lambda \in [0,10]\) avec un pas de \(\frac{11}{10}\), celui qui minimise l’erreur de prévision estimé à partir de la validation croisée est le modèle avec comme paramètres \(\alpha = 0.315\) et \(\lambda = 1.05\) avec une RMSE = 2.533. Plus faible que celle obtenu par la méthode PLS.
plot(varImp(model1))
Pour ce modèle, les variables les plus pertinentes sont la FBCF, qui mesure les dépenses totales du pays consacrées à la production de capital fixe, le taux de mortalité, susceptible de varier en fonction des conditions de vie des habitants (par exemple : pollution de l’air, accès aux soins, etc…), ainsi que la proportion d’adolescents déscolarisés, liée à l’insertion professionnelle précoce des jeunes dans le secteur de l’industrie dans les pays du Sud.
6 Double machine learning
6.1 Instanciation et ajustement du modèle DoubleMLPLR
# Transformation des variables catégorielles en variables numériques (si nécessaire)
dummy <- dummyVars(" ~ .", data = Emission)
Emission <- data.frame(predict(dummy, newdata = Emission))
doubleml_data <- double_ml_data_from_data_frame(Emission,
y_col = "Emissions_CO2",
d_cols = "GDP_per_capita",
x_cols = c("Population_15_64", "Manufacturing_percent_of_GDP"))
# Configuration des learners pour les composantes du modèle
ml_gdp = lrn("regr.cv_glmnet", s = "lambda.min")
ml_pop = lrn("regr.cv_glmnet", s = "lambda.min")
# Création de l'objet DoubleMLPLR
doubleml_plr = DoubleMLPLR$new(doubleml_data, ml_gdp, ml_pop)
doubleml_plr$fit()
## INFO [21:00:36.503] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/5)
## INFO [21:00:36.604] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/5)
## INFO [21:00:36.657] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/5)
## INFO [21:00:36.973] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 4/5)
## INFO [21:00:37.018] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 5/5)
## INFO [21:00:37.235] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 1/5)
## INFO [21:00:37.279] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 2/5)
## INFO [21:00:37.328] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 3/5)
## INFO [21:00:37.388] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 4/5)
## INFO [21:00:37.432] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_m' (iter 5/5)
doubleml_plr$summary()
## Estimates and significance testing of the effect of target variables
## Estimate. Std. Error t value Pr(>|t|)
## GDP_per_capita 9.640e-05 1.632e-05 5.908 3.46e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
L’analyse du Double Machine Learning montre que l’augmentation du PIB par habitant est positivement associée à une augmentation des émissions de CO2 (effet causale). Avec chaque unité supplémentaire de PIB par habitant, les émissions de CO2 augmentent de 0.00009829 unités. Cette relation est statistiquement très significative, indiquant que le développement économique, tel que mesuré par le PIB, peut contribuer à une augmentation des émissions, ce qui pose d’importantes questions sur les impacts environnementaux de la croissance économique.
6.2 Bootstrap , intervalle de confiance et ajustement des p-values
doubleml_plr$bootstrap(method = "normal", n_rep_boot = 1000)
# Intervalles de confiance simultanés
doubleml_plr$confint(joint = TRUE)
## 2.5 % 97.5 %
## GDP_per_capita 6.462952e-05 0.0001281637
# Ajustement des p-valeurs
doubleml_plr$p_adjust(method = "romano-wolf")
## Estimate. pval
## GDP_per_capita 9.63966e-05 0
doubleml_plr$p_adjust(method = "bonferroni")
## Estimate. pval
## GDP_per_capita 9.63966e-05 3.459743e-09
Les résultats montrent clairement que l’effet du PIB par habitant sur les émissions de CO2 est statistiquement significatif et robuste. Les intervalles de confiance indiquent que cet effet est positivement estimé entre environ 0.0000626 et 0.0001282. Même après des ajustements rigoureux pour le contrôle des erreurs multiples via les méthodes de Romano-Wolf et de Bonferroni, l’impact significatif du PIB par habitant sur les émissions reste extrêmement faible en termes de p-valeur. Ces analyses confirment que l’augmentation du PIB par habitant est associée à une hausse des émissions de CO2, mettant en lumière l’importance des considérations environnementales dans les politiques de croissance économique.
7 Annexe
- Partie 1 Introduction et présentation du sujet : Emmarius 100%
- Partie 2 Collecte et traitement des données : Emmarius 100%
- Partie 3 Analyse descriptive des données : Mohamed 75% (code, commentaire) Emmarius 25% (commentaire)
- Parite 4 Problème d’endogénéïté : Emmarius 50% (specification du modele, test, commentaire) Mohamed 50% (specification du modele, test, commentaire)
- Partie 5 Traitement de la multicolinéarité : Emmarius 100%
- Partie 6 Double machine learning : Mohamed 100%